define(
		[ "ng","stjs", "_","coordinador/js/coordinador-module", "common/js/user-module",
				"common/js/util-module", "common/js/colegio-info-module","ui.router" ],
		function(angular,stjs,_) {
			var app = angular.module("CoordinadorApp", [ 'UserModule', 'UtilModule',
					'CoordinadorModule', "ColegioInfoModule", "ui.router" ]);

			app.constant("OpcionesAdmin", [ {
				name : "admin.estudiantes",
				displayName : "Estudiantes",
				config : {
					url : '/estudiantes',
					templateUrl : '/coordinador/coor-estudiantes.html',
					controller : 'AdminEstudiantesCtrl'
				}
			}, {
				name : "admin.calendario",
				displayName : "Calendario académico",
				config : {
					url : '/calendario',
					templateUrl : '/coordinador/coor-calendario.html',
					controller : 'AdminCalendarioCtrl'
				}
			}, {
				name : "admin.cursos",
				displayName : "Cursos",
				config : {
					url : '/cursos',
					templateUrl : '/coordinador/coor-cursos.html',
					controller : 'AdminCursosCtrl'
				}
			}, ]);

			app.constant("OpcionesUsers", [ {
				name : "users.secretarios",
				displayName : "Secretarios",
				config : {
					url : '/secretarios',
					templateUrl : '/coordinador/coor-users-users.html',
					controller : 'UsersUsersCtrl'
				}
			}, {
				name : "users.profesores",
				displayName : "Profesores",
				config : {
					url : '/profesores',
					templateUrl : '/coordinador/coor-users-users.html',
					controller : 'UsersUsersCtrl'
				}
			} ]);

			app.config(function($stateProvider, $urlRouterProvider, OpcionesAdmin,
					OpcionesUsers) {
				$urlRouterProvider.otherwise("/admin");
				$stateProvider.state("admin", {
					url : '/admin',
					templateUrl : '/coordinador/coor-admin-ops.html',
					controller : 'AdminCtrl'
				});

				$stateProvider.state("users", {
					url : '/users',
					templateUrl : '/coordinador/coor-users-ops.html',
					controller : 'UsersCtrl'
				});

				$stateProvider.state("admin.curso", {
					url : '/cursos/:idCurso',
					templateUrl : '/coordinador/coor-curso.html',
					controller : 'AdminCursoCtrl'
				});

				$stateProvider.state("admin.matricula", {
					url : '/admin/estudiante/:idEstudiante',
					templateUrl : '/coordinador/coor-matricula.html',
					controller : 'AdminMatriculaCtrl'
				});

				$stateProvider.state("test", {
					url : "/test",
					templateUrl : "/coordinador/test.html",
					controller : "TestCtrl"
				});

				_.each(OpcionesAdmin, function(state) {
					$stateProvider.state(state.name, state.config);
				});
				_.each(OpcionesUsers, function(state) {
					$stateProvider.state(state.name, state.config);
				});

			});
			
			
			app.controller("CoordinadorCtrl", function($scope, User, $window, $state,
					Coordinador, $http) {
				$scope.$on("$stateChangeSuccess", function(event,state){
					$scope.helpUrl = "api/help/"+state.name;
				});
				
				$scope.goNext = function() {
					var mensajes = Coordinador.goNext({}, {}, function(data) {
						console.log(data);
					});
				};

				$scope.user = User.getMyInfo();
				$scope.isState = function(state) {
					return $state.includes(state);
				};
				$scope.logOut = function() {
					User.logout({}, function() {
						$window.location.href = "/";
					}, function(error) {
						$window.location.href = "/";
					});
				};
			});

			app.controller("AdminCtrl", function($scope, OpcionesAdmin) {

				$scope.opciones = OpcionesAdmin;

			});

			app.controller("UsersCtrl", function($scope, OpcionesUsers) {
				$scope.opciones = OpcionesUsers;
			});

			@ClassDef:client.coordinador.AdminEstudiantesScope@
			app.controller("AdminEstudiantesCtrl", stjs.toAngularCtrl(AdminEstudiantesScope));

			@ClassDef:client.coordinador.AdminEstudianteScope@
			app.controller('AdminEstudianteCtrl', stjs.toAngularCtrl(AdminEstudianteScope));

			@ClassDef:client.coordinador.AdminCursosScope@
			app.controller("AdminCursosCtrl", stjs.toAngularCtrl(AdminCursosScope));
			
			@ClassDef:client.coordinador.AdminCursoScope@
			app.controller("AdminCursoCtrl", stjs.toAngularCtrl(AdminCursoScope));

			app.controller("AdminMateriasCtrl",
					function($scope, Coordinador) {

					});

			@ClassDef:client.coordinador.AdminCalendarioScope@			
			app.controller("AdminCalendarioCtrl",stjs.toAngularCtrl(AdminCalendarioScope));

			app.controller("UsersUsersCtrl", function($scope, $state, Coordinador,
					epModal) {
				window.epModal = epModal;
				var crearUsuario = {
					"users.secretarios" : Coordinador.newSecretario,
					"users.profesores" : Coordinador.newProfesor
				}[$state.current.name];
				var cargarUsuarios = {
					"users.secretarios" : Coordinador.getSecretarios,
					"users.profesores" : Coordinador.getProfesores
				}[$state.current.name];

				$scope.colUsers = cargarUsuarios();

				$scope.nuevoUsuario = {}

				$scope.crearUsuario = function() {

					var nuevoUsuario = $scope.nuevoUsuario;
					var colUsers = $scope.colUsers;
					nuevoUsuario = crearUsuario({}, nuevoUsuario, function() {
						colUsers.push(nuevoUsuario);
						epModal.close('nuevo-usuario');
					});

					$scope.nuevoUsuario = {};
				}

			});
			return app;
		});
